From 7493e814a9501538d5db1e289200ed40bffdc857 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 16 Dec 2014 05:57:36 +0100 Subject: [PATCH] cssanimatedstyle: Apply animation values after creation This makes GtkCssAnimatedStyle immutable. --- gtk/gtkcssanimatedstyle.c | 3 +++ gtk/gtkstylecontext.c | 51 ++++++++++++++++----------------------- 2 files changed, 24 insertions(+), 30 deletions(-) diff --git a/gtk/gtkcssanimatedstyle.c b/gtk/gtkcssanimatedstyle.c index efdbe12f95..b8c0d9a269 100644 --- a/gtk/gtkcssanimatedstyle.c +++ b/gtk/gtkcssanimatedstyle.c @@ -435,8 +435,11 @@ gtk_css_animated_style_new (GtkCssStyle *base_style, result = g_object_new (GTK_TYPE_CSS_ANIMATED_STYLE, NULL); result->style = g_object_ref (base_style); + result->current_time = timestamp; result->animations = animations; + gtk_css_animated_style_apply_animations (result, timestamp); + return GTK_CSS_STYLE (result); } diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c index fb227d4b09..401a5601bc 100644 --- a/gtk/gtkstylecontext.c +++ b/gtk/gtkstylecontext.c @@ -2829,16 +2829,7 @@ _gtk_style_context_validate (GtkStyleContext *context, priv->scale, gtk_style_context_should_create_transitions (context) ? current : NULL); - if (!GTK_IS_CSS_ANIMATED_STYLE (values) || - gtk_css_animated_style_is_static (GTK_CSS_ANIMATED_STYLE (values))) - { - change &= ~GTK_CSS_CHANGE_ANIMATE; - } - else - { - change |= GTK_CSS_CHANGE_ANIMATE; - style_info_set_values (info, values); - } + style_info_set_values (info, values); _gtk_style_context_update_animating (context); if (current) @@ -2855,6 +2846,8 @@ _gtk_style_context_validate (GtkStyleContext *context, } else { + gtk_style_context_update_cache (context, parent_changes); + changes = gtk_css_style_compute_dependencies (current, parent_changes); if (!_gtk_bitmask_is_empty (changes)) { @@ -2864,31 +2857,29 @@ _gtk_style_context_validate (GtkStyleContext *context, update_properties (context, current, info->decl, changes); } - gtk_style_context_update_cache (context, parent_changes); - } - - if (current) - g_object_unref (current); - - if (change & GTK_CSS_CHANGE_ANIMATE && - gtk_style_context_is_animating (context)) - { - GtkCssStyle *new_values; - GtkBitmask *animation_changes; + if (change & GTK_CSS_CHANGE_ANIMATE && + gtk_style_context_is_animating (context)) + { + GtkCssStyle *new_values; + GtkBitmask *animation_changes; - new_values = gtk_css_animated_style_new_advance (GTK_CSS_ANIMATED_STYLE (info->values), timestamp); - animation_changes = gtk_css_style_get_difference (new_values, info->values); - style_info_set_values (info, new_values); - g_object_unref (new_values); + new_values = gtk_css_animated_style_new_advance (GTK_CSS_ANIMATED_STYLE (info->values), timestamp); + animation_changes = gtk_css_style_get_difference (new_values, info->values); + style_info_set_values (info, new_values); + g_object_unref (new_values); - changes = _gtk_bitmask_union (changes, animation_changes); - _gtk_bitmask_free (animation_changes); + changes = _gtk_bitmask_union (changes, animation_changes); + _gtk_bitmask_free (animation_changes); - if (!GTK_IS_CSS_ANIMATED_STYLE (info->values) || - gtk_css_animated_style_is_static (GTK_CSS_ANIMATED_STYLE (info->values))) - _gtk_style_context_update_animating (context); + if (!GTK_IS_CSS_ANIMATED_STYLE (info->values) || + gtk_css_animated_style_is_static (GTK_CSS_ANIMATED_STYLE (info->values))) + _gtk_style_context_update_animating (context); + } } + if (current) + g_object_unref (current); + if (!_gtk_bitmask_is_empty (changes)) gtk_style_context_do_invalidate (context, changes); -- 2.30.2